package org.example.stockdemo.util;

import java.time.LocalTime;
import java.util.Calendar;

/**
 * @author :Mr.zhou
 * @description: TODO edit class Description
 * @create date: 2025/10/21 23:24
 */
public class StockUtil {

    /**
     * 添加股票代码的前缀
     *
     * @param stockCode
     * @return
     */
    public static String addStockPrefix(String stockCode) {
        if (stockCode.startsWith("00") || stockCode.startsWith("30")) {
            return ("sz" + stockCode);
        } else {
            return ("sh" + stockCode);
        }
    }

    /**
     * 移除股票代码的前缀
     *
     * @param stockCode
     * @return
     */
    public static String removeStockPrefix(String stockCode) {
        if (stockCode.startsWith("sz")) {
            return stockCode.substring(2);
        } else if (stockCode.startsWith("sh")) {
            return stockCode.substring(2);
        } else {
            return stockCode;
        }
    }

    /**
     * 是否在下午运行时间
     *
     * @return
     */
    public static boolean atPMRuntime() {
        LocalTime currentTime = LocalTime.now();
        LocalTime startTime = LocalTime.of(13, 00);
        LocalTime endTime = LocalTime.of(15, 00);

        // 如果当前时间不在指定范围内，则直接返回
        if (currentTime.isBefore(startTime) || !currentTime.isBefore(endTime)) {
            return false;
        }
        return true;
    }

    /**
     * 是否在上午运行时间
     *
     * @return
     */
    public static boolean atAMRuntime() {
        // 判断是否是节假日或休息日

        LocalTime currentTime = LocalTime.now();
        LocalTime startTime = LocalTime.of(9, 29);
        LocalTime endTime = LocalTime.of(11, 30);

        // 如果当前时间不在指定范围内，则直接返回
        if (currentTime.isBefore(startTime) || !currentTime.isBefore(endTime)) {
            return false;
        }
        return true;
    }

    /**
     * 判断是否为交易时间
     *
     * @return true表示是交易时间，false表示非交易时间
     */
    public static boolean isTradingTime() {
        // 首先判断是否为工作日
        if (!isWeekday()) {
            return false;
        }

        // 再判断是否为交易时间段
        return atAMRuntime() || atPMRuntime();
    }


    /**
     * 判断是否是工作日（非周末）
     *
     * @return true表示是工作日，false表示是周末
     */
    public static boolean isWeekday() {
        Calendar calendar = Calendar.getInstance();
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        // Sunday = 1, Monday = 2, ..., Saturday = 7
        return dayOfWeek > 1 && dayOfWeek < 7;
    }

}
